﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Citas.Dominio;
using Citas.Negocio;
using System.Messaging;
using System.Threading.Tasks;
using System.Threading;

namespace Citas.Controllers
{
    public class AtencionController : Controller
    {
        IAdministracionService adminService = null;
        //
        // GET: /Cliente/

        public ActionResult Index()
        {
            ICollection<Atencion> collectionAtencion = new List<Atencion>();
            return View(collectionAtencion);
        }
        
        //
        // POST: /Atencion

        [HttpPost]
        public ActionResult Index(FormCollection collection)
        {
            try
            {
                ICollection<Atencion> collectionAtencion = new List<Atencion>();

                string rutaCola = @".\private$\clinica";
                if (!MessageQueue.Exists(rutaCola))
                    MessageQueue.Create(rutaCola);

                while(true) {                    
                    MessageQueue cola = new MessageQueue(rutaCola);
                    cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Atencion) });

                    try
                    {
                        Message mensaje = cola.Receive(TimeSpan.Zero);
                        Atencion atencion = (Atencion)mensaje.Body;

                        Cita cita = adminService.ObtenerCita(atencion.NumeroCita);

                        adminService.ModificarCita(cita.Numero, cita.FechaHora, cita.Paciente.Codigo, cita.MedicoEspecialidad.Codigo,
                            cita.NumeroConsultorio, cita.Precio, atencion.Estado);

                        collectionAtencion.Add(atencion);
                    }
                    catch (MessageQueueException mqex)
                    {
                        if (mqex.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
                        {
                            ViewData["mensaje"] = "Se actualizaron satisfactoriamente las siguientes citas:";
                            return View("Index", collectionAtencion);
                        }
                        else
                        {
                            throw;
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                return View();
            }
        }
    }
}
